/**
 * 基础智能体类
 * 所有子智能体的父类，提供通用功能和接口
 */
export class BaseAgent {
  protected id: string;
  protected name: string;
  protected description: string;
  protected type: string;
  protected capabilities: string[];
  protected parameters: Record<string, any>;

  /**
   * 构造函数
   * @param config 智能体配置
   */
  constructor(config: {
    id: string;
    name: string;
    description: string;
    type: string;
    capabilities: string[];
    parameters: Record<string, any>;
  }) {
    this.id = config.id;
    this.name = config.name;
    this.description = config.description;
    this.type = config.type;
    this.capabilities = config.capabilities;
    this.parameters = config.parameters;
  }

  /**
   * 获取智能体ID
   */
  getId(): string {
    return this.id;
  }

  /**
   * 获取智能体名称
   */
  getName(): string {
    return this.name;
  }

  /**
   * 获取智能体描述
   */
  getDescription(): string {
    return this.description;
  }

  /**
   * 获取智能体类型
   */
  getType(): string {
    return this.type;
  }

  /**
   * 获取智能体能力列表
   */
  getCapabilities(): string[] {
    return [...this.capabilities];
  }

  /**
   * 设置智能体参数
   * @param key 参数名
   * @param value 参数值
   */
  setParameter(key: string, value: any): void {
    this.parameters[key] = value;
  }

  /**
   * 获取智能体参数
   * @param key 参数名
   * @returns 参数值
   */
  getParameter(key: string): any {
    return this.parameters[key];
  }

  /**
   * 执行智能体任务（需要由子类实现）
   * @param input 输入数据
   * @returns 执行结果
   */
  async execute(input: any): Promise<any> {
    throw new Error('子类必须实现execute方法');
  }

  /**
   * 检查智能体是否支持指定能力
   * @param capability 能力名称
   * @returns 是否支持
   */
  hasCapability(capability: string): boolean {
    return this.capabilities.includes(capability);
  }
}
